package single1;

/**
 * 通过枚举来实现单例模式
 *
 * 因为不能通过反射来创建枚举 所以可以规避通过反射来创建对象的方式
 *
 * Java虚拟机会保证枚举类型不能被反射并且构造函数只被执行一次。
 */
public class Single8 {



    /**
     * 枚举类型是线程安全的，并且只会装载一次
     */
    private enum Singleton{
        INSTANCE;

        private Single8 instance;

        Singleton(){
            instance = new Single8();
        }

        private Single8 getInstance(){
            return instance;
        }
    }

    public static Single8 getInstance(){
        return Singleton.INSTANCE.getInstance();
    }

}

